package com.wx.router;

import me.chanjar.weixin.mp.api.WxMpMessageRouterRule;

public interface WxMpRouterRuleDetails {

	/**
	 * 关注事件 <xml> <ToUserName><![CDATA[toUser]]></ToUserName>
	 * <FromUserName><![CDATA[FromUser]]></FromUserName>
	 * <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType>
	 * <Event><![CDATA[subscribe]]></Event> </xml>
	 * 
	 * 
	 */
	void ruleSubscribe();

	void dealSubscribe(WxMpMessageRouterRule rule);

	/**
	 * 取消关注事件 <xml> <xml> *<ToUserName><![CDATA[toUser]]></ToUserName>
	 * <FromUserName><![CDATA[FromUser]]></FromUserName>
	 * <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType>
	 * <Event><![CDATA[subscribe]]></Event>
	 * <EventKey><![CDATA[qrscene_123123]]></EventKey>
	 * <Ticket><![CDATA[TICKET]]></Ticket> </xml>
	 * 
	 * 
	 */
	void ruleUnsubscribe();

	void dealUnsubscribe(WxMpMessageRouterRule rule);

	/**
	 * 扫描带参数二维码事件 1. 用户未关注时，进行关注后的事件推送 扫描带参数二维码事件
	 * 
	 * <xml><ToUserName><![CDATA[toUser]]></ToUserName>
	 * <FromUserName><![CDATA[FromUser]]></FromUserName>
	 * <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType>
	 * <Event><![CDATA[subscribe]]></Event>
	 * <EventKey><![CDATA[qrscene_123123]]></EventKey>
	 * <Ticket><![CDATA[TICKET]]></Ticket> </xml>
	 */
	void ruleScanQrCodeUnsubscribe();

	void dealScanQrCodeUnsubscribe(WxMpMessageRouterRule rule);

	/**
	 * 2. 用户已关注时的事件推送
	 * 
	 * <xml> <ToUserName><![CDATA[toUser]]></ToUserName>
	 * <FromUserName><![CDATA[FromUser]]></FromUserName>
	 * <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType>
	 * <Event><![CDATA[SCAN]]></Event>
	 * <EventKey><![CDATA[SCENE_VALUE]]></EventKey>
	 * <Ticket><![CDATA[TICKET]]></Ticket> </xml>
	 * 
	 * 
	 */
	void ruleScanQrCodeSubscribe();

	void dealScanQrCodeSubscribe(WxMpMessageRouterRule rule);

	/**
	 * 上报地理位置事件
	 * 
	 * <xml> <ToUserName><![CDATA[toUser]]></ToUserName>
	 * <FromUserName><![CDATA[fromUser]]></FromUserName>
	 * <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType>
	 * <Event><![CDATA[LOCATION]]></Event> <Latitude>23.137466</Latitude>
	 * <Longitude>113.352425</Longitude>
	 * <Precision>119.385040</Precision> </xml>
	 * 
	 **/
	void ruleLocationEnable();

	void dealLocationEnable(WxMpMessageRouterRule rule);

	/**
	 * 点击菜单拉取消息时的事件推送 <xml> <ToUserName><![CDATA[toUser]]></ToUserName>
	 * <FromUserName><![CDATA[FromUser]]></FromUserName>
	 * <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType>
	 * <Event><![CDATA[CLICK]]></Event>
	 * <EventKey><![CDATA[EVENTKEY]]></EventKey> </xml>
	 * 
	 * @return
	 */
	void ruleMenuKey();

	void dealMenuKey(WxMpMessageRouterRule rule);

	/**
	 * 点击菜单跳转链接时的事件推送 <xml> <ToUserName><![CDATA[toUser]]></ToUserName>
	 * <FromUserName><![CDATA[FromUser]]></FromUserName>
	 * <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType>
	 * <Event><![CDATA[VIEW]]></Event>
	 * <EventKey><![CDATA[www.qq.com]]></EventKey> </xml>
	 * 
	 * @return
	 */
	void ruleMenuUrl();

	void dealMenuUrl(WxMpMessageRouterRule rule);

	/**
	 * 文本消息
	 * 
	 * <xml> <ToUserName><![CDATA[toUser]]></ToUserName>
	 * <FromUserName><![CDATA[fromUser]]></FromUserName>
	 * <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType>
	 * <Content><![CDATA[this is a test]]></Content>
	 * <MsgId>1234567890123456</MsgId> </xml>
	 * 
	 * @param rule
	 * @return
	 */
	void ruleTxtMsg();

	void dealTxtMsg(WxMpMessageRouterRule rule);

	/**
	 * 图片消息
	 * 
	 * <xml> <ToUserName><![CDATA[toUser]]></ToUserName>
	 * <FromUserName><![CDATA[fromUser]]></FromUserName>
	 * <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[image]]></MsgType>
	 * <PicUrl><![CDATA[this is a url]]></PicUrl>
	 * <MediaId><![CDATA[media_id]]></MediaId>
	 * <MsgId>1234567890123456</MsgId> </xml>
	 * 
	 * @param rule
	 * @return
	 */
	void ruleImageMsg();

	void dealImageMsg(WxMpMessageRouterRule rule);

	/**
	 * 语音消息
	 * 
	 * <xml> <ToUserName><![CDATA[toUser]]></ToUserName>
	 * <FromUserName><![CDATA[fromUser]]></FromUserName>
	 * <CreateTime>1357290913</CreateTime> <MsgType><![CDATA[voice]]></MsgType>
	 * <MediaId><![CDATA[media_id]]></MediaId>
	 * <Format><![CDATA[Format]]></Format>
	 * <MsgId>1234567890123456</MsgId> </xml>
	 * 
	 * @param rule
	 * @return
	 */
	void ruleVoiceMsg();

	void dealVoiceMsg(WxMpMessageRouterRule rule);

	/**
	 * 视频消息
	 * 
	 * <xml> <ToUserName><![CDATA[toUser]]></ToUserName>
	 * <FromUserName><![CDATA[fromUser]]></FromUserName>
	 * <CreateTime>1357290913</CreateTime> <MsgType><![CDATA[video]]></MsgType>
	 * <MediaId><![CDATA[media_id]]></MediaId>
	 * <ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>
	 * <MsgId>1234567890123456</MsgId> </xml>
	 * 
	 * @param rule
	 * @return
	 */
	void ruleVideoMsg();

	void dealVideoMsg(WxMpMessageRouterRule rule);

	/**
	 * 小视频消息
	 * 
	 * <xml> <ToUserName><![CDATA[toUser]]></ToUserName>
	 * <FromUserName><![CDATA[fromUser]]></FromUserName>
	 * <CreateTime>1357290913</CreateTime>
	 * <MsgType><![CDATA[shortvideo]]></MsgType>
	 * <MediaId><![CDATA[media_id]]></MediaId>
	 * <ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>
	 * <MsgId>1234567890123456</MsgId> </xml>
	 * 
	 * @param rule
	 * @return
	 */
	void ruleShortVideoMsg();

	void dealShortVideoMsg(WxMpMessageRouterRule rule);

	/**
	 * 地理位置消息
	 * 
	 * <xml> <ToUserName><![CDATA[toUser]]></ToUserName>
	 * <FromUserName><![CDATA[fromUser]]></FromUserName>
	 * <CreateTime>1351776360</CreateTime>
	 * <MsgType><![CDATA[location]]></MsgType>
	 * <Location_X>23.134521</Location_X> <Location_Y>113.358803</Location_Y>
	 * <Scale>20</Scale> <Label><![CDATA[位置信息]]></Label>
	 * <MsgId>1234567890123456</MsgId> </xml>
	 * 
	 * @param rule
	 * @return
	 */
	void ruleLocationMsg();

	void dealLocationMsg(WxMpMessageRouterRule rule);

	/**
	 * 链接消息
	 * 
	 * <xml> <ToUserName><![CDATA[toUser]]></ToUserName>
	 * <FromUserName><![CDATA[fromUser]]></FromUserName>
	 * <CreateTime>1351776360</CreateTime> <MsgType><![CDATA[link]]></MsgType>
	 * <Title><![CDATA[公众平台官网链接]]></Title>
	 * <Description><![CDATA[公众平台官网链接]]></Description>
	 * <Url><![CDATA[url]]></Url> <MsgId>1234567890123456</MsgId> </xml>
	 * 
	 * @param rule
	 * @return
	 */
	void ruleLinkMsg();

	void dealLinkMsg(WxMpMessageRouterRule rule);
}
